Вычислительная способность (CC) выступает в качестве версионной моста между виртуальной архитектурой (PTX) и реальной архитектурой (SASS/Бинарный). Разработчики используют nvcc для целевых платформ, от настольных/серверных до встраиваемых, в различных моделях ОС, таких как Linux 64-бит (LP64) или Windows 64-бит (LLP64).
1. Виртуальные и реальные архитектуры
Набор инструментов CUDA поддерживает архитектуры видеокарт последних двух основных версий, упомянутые в Таблице 29: Поддержка функций по вычислительной способности (от 7.5 до 12.x). Мы определяем сопоставления с помощью флагов, таких как: nvcc --generate-code arch=compute_80,code=sm_90 prog.cu. Для будущих целей используются флаги, такие как nvcc -arch=sm_100 или специализированные варианты, такие как nvcc -arch=sm_100a используются.
2. Иерархия макросов
Компилятор использует __CUDA_ARCH__ для ветвления кода. Макрос __CUDA_ARCH__ определён только в коде устройства (например, __device__, __global__). Более тонкое управление обеспечивается макросами __CUDA_ARCH_SPECIFIC__ и __CUDA_ARCH_FAMILY_SPECIFIC__. Некоторые функции, такие как распределённая общая память или конкретные значения NaN, требуют вычислительную способность 9.0+ или вычислительную способность 10.0 и выше.
3. Числовые ограничения и ограничения
Точность зависит от вычислительной способности; например, обработка субнормальных чисел гарантирует $2^{-16382} \approx 3.36 \cdot 10^{-4932}$. Аппаратные ограничения, такие как CUDA_DEVICE_MAX_COPY_CONNECTIONS=16 или директива .maxnreg директива PTX строго соблюдаются в зависимости от целевой версии вычислительной способности.